灰色模型java代码 |
您所在的位置:网站首页 › java 简单代码 › 灰色模型java代码 |
灰⾊模型 java 代码 _ 灰⾊模型的简单 Java 实现 前⼏天在以前的遗留代码中发现⼀个问题,就是我⽣成的⼀个数据的⾛势曲线的预测值(⽤于灰⾊时间序列预测)总是和⽼代码⾥的不⼀致, 具体来说就是:遗留代码⾥⾯的预测值的斜率总是为零,相⽐之下我⽣成的就⽐较合理了,和原有数据的⾛势相⽐基本⼀致。后来发现这个 不知道谁写的代码⾥⾯⼜全是坑,连灰⾊模型都是错的,输⼊的数据也是错的。。。 所以,趁着这个周末有空,抽出⼀点陪⼥朋友的时间(不会花太长时间的,还是⼥朋友重要!),来写⼀些关于灰⾊模型的Java的简单实现。 ⼀、对灰⾊模型的建模分析 ⾸先,关于灰⾊模型(后⾯简称为GM),简单讲就是介于⿊⾊模型和⽩⾊模型之间,利⽤已知的数据来推测未知数据的⼀种模型(更具体的描 述可以看灰⾊模型的简单介绍)。 好的,从上⾯我们可以知道,运⽤GM,有这么⼏个步骤:处理数据,使其可以运⽤于GM中 设原始数据列为$$X^{(0)}=x^{(0)}(1)+x^{(0)}(2)+x^{(0)}(3)+…+x^{(0)}(n)$$那么其级数⽐则是:$$λ(k)=frac{x^{(0)}(k-1)} {x^{(0)}(k)},k=2,3,4…n$$ 当所有级数⽐都在区间:$$(e^{frac{-2}{n+1}},e^{frac{2}{n+1}})(注:这个区间和正态分布的概率密度有关)$$ 此时的数据列就可以建⽴GM,否则,对原始数据列进⾏变换(⽐如平移),使其满⾜上⾯的条件。 建⽴GM模型 假设数据列:$$X^{(0)}=x^{(0)}(1)+x^{(0)}(2)+.。。+x^{(0)}(n)$$满⾜条件,我们再通过累加⽣成数据列(也可以使⽤其他⽅式,⽐如累 减、均值等):$$X^{(1}=x^{(1)}(1)+x^{(1)}(2)+.。。+x^{(1)}(n)$$ 其中:$$x^{(1)}(k)=sum_{i=0}^{k}x(i)$$ 定义(x^{(1)})的灰导数为: $$dx^{(1)}(k)=x^{(0)}(k)=x^{(1)}(k)+x^{(1)}(k-1)$$ 令:$$z^{(1)}(k)=frac{1}{2}(x^{(1)}(k)+x^{(1)}(k-1)),(k=2,3,…,n)$$ 定义GM(1,1)的灰微分⽅程模型为: $$x^{(0)}(k)+az^{(1)}(k)=b$$ (其中x^{(0)}(k)称为灰导数,a称为发展系数,z^{(1)}(k)称为⽩化背景值,b称为灰作⽤量)。 (将x^{(0)}(k)+az^{(1)}(k)=b) 展开成如下形式: $$left[matrix{x^{(0)}(2)\x^{(0)}(3)\x^{(0)}(4)\ …\x^{(0)}(n)}right]=left[matrix{-frac{1}{2}(x^{(1)}(1)+x^{(1)}(2))&1\ -frac{1} {2}(x^{(1)}(2)+x^{(1)}(3))&1\ -frac{1}{2}(x^{(1)}(3)+x^{(1)}(4))&1\ …& …\ -frac{1}{2}(x^{(1)}(n-1)+x^{(1)}(n))&1}right]$$ (令Y=left[matrix{x^{(0)}(2)\x^{(0)}(3)\x^{(0)}(4)\ …\x^{(0)}(n)}right],B=left[matrix{-frac{1}{2}(x^{(1)}(1)+x^{(1)}(2))&1\ - frac{1}{2}(x^{(1)}(2)+x^{(1)}(3))&1\ -frac{1}{2}(x^{(1)}(3)+x^{(1)}(4))&1\ …& …\ -frac{1}{2}(x^{(1)}(n-1)+x^{(1)} (n))&1}right],phi=left[matrix{a &b}right]^{mit T},则上式可以写成Y=Bphi) 由最⼩平⽅法可以求出:$$hat{phi}=left[matrix{hat{a} & hat{b}}right]^{mit T}=(B^{mit T}B)^{-1}B^{T}Y$$ 将其代⼊,求出离散解为:$$hat{x^{(1)}}(k+1)=(x^{(0)}(1)-frac{hat{b}}{hat{a}})e^{-hat{a}K}+frac{hat{b}}{hat{a}} (1)$$ 对于原始数据,有:$$hat{x}^{(0)}(k+1)=hat{x}^{(1)}(k+1)-hat{x}^{(1)}(k)=(1-e^{hat{a}})(x^{(0)}(1)-frac{hat{b}}{hat{a}})e^{- hat{a}k} (2)$$ (1)、(2)式称为GM(1,1)模型的时间响应函数模型,是我们计算预测值的基本公式。 对于灰微分⽅程,若将(x^{(0)}(k))的时间k视为连续变量t,则数列(x^{(1)})可视为时间的函数,记为(x^{(1)}=x^{(1)}(t)),并让灰导数对应 于导数(frac{dx^{(1)}}{dt}),背景值(z^{(1)}(k))对应于(x^{(1)}(k)),则得到的GM(1,1)对应的⽩微分⽅程:$$frac{dx^{(1)}} {dt}+ax^{(1)}=b$$称之为GM(1,1)的⽩化型。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |